Jak spustit soubor asociovany k aplikaci

Otázka od: Ales Vasicek

6. 11. 2003 14:26

Ahoj,

resim nasledujici problem. V databazi mam ulozene soubory, ktere potrebuji
nejakym zpusobem spustit. Vezmu tedy soubor, ulozim jej na disk a nyni bych ho
potreboval spustit v aplikaci, se kterou je asociovan. Nechci pouzit
ShellExecute, protoze potrebuju vedet, ze uzivatel ukoncil aplikaci, ve ktere
se soubor spustil. Chtel jsem pouzit nasledujici fci, ale ta funguje pouze na
spustitelne soubory coz je logicke:

function WinExecAndWait32(FileName:String; Visibility : integer):Integer;
var
  zAppName:array[0..512] of char;
  zCurDir:array[0..255] of char;
  WorkDir:String;
  StartupInfo:TStartupInfo;
  ProcessInfo:TProcessInformation;
  Res : Cardinal;
begin
  StrPCopy(zAppName, FileName);
  GetDir(0,WorkDir);
  StrPCopy(zCurDir,WorkDir);
  FillChar(StartupInfo,Sizeof(StartupInfo),#0);
  StartupInfo.cb := Sizeof(StartupInfo);

  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := Visibility;
  if not CreateProcess(nil,
    zAppName, { pointer to command line string }
    nil, { pointer to process security attributes }
    nil, { pointer to thread security attributes }
    false, { handle inheritance flag }
    CREATE_NEW_CONSOLE or { creation flags }
    NORMAL_PRIORITY_CLASS,
    nil, { pointer to new environment block }
    nil, { pointer to current directory name }
    StartupInfo, { pointer to STARTUPINFO }
    ProcessInfo) then Result := -1 { pointer to PROCESS_INF }

  else begin
         while WaitForSingleObject(ProcessInfo.hProcess, 100) = Wait_Timeout
         do Application.ProcessMessages;
         GetExitCodeProcess(ProcessInfo.hProcess, Res);
         CloseHandle(ProcessInfo.hProcess);
         Result := Res;
       end;
end;



Zkousel jsem vycist informace o klientske aplikaci z registru, ale mam s tim
docela problem. Napriklad pro .mp3 soubor mi vrati retezec na spusteni
"C:\Program Files\Winamp\Winamp.exe" "%1"
ale napriklad pro .doc mi vrati
"C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE" /n /dde

Cili absolutne zadna souvislost... Muzete mi prosim nekdo poradit, jak ze sve
aplikace spustit soubor v aplikaci se kterou je asociovan a aby ma aplikace
cekala, dokud uzivatel nezavre asociovanou aplikaci? Potrebuji totiz po jejim
zavreni soubor zase vlozit do databaze, pokud se zmenil -> uzivatel provedl
zmeny.

Ales




----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Peter Ondras

6. 11. 2003 14:29

Neviem, ci to pomoze (neskusal som to), ale vyskusaj spustat subor START
a ako parameter mu davaj subor, ktory chces realne spustit. Napr.
"start
video.avi" (bez tych uvodzoviek. Uvodzovky pouzivaj len na nazov suboru
v pripade, ze obsahuje medzery).

Peter Ondras - www.ondras.sk
peter.ondras@pse.sk
+421 904 421 925

> resim nasledujici problem. V databazi mam ulozene soubory, ktere
potrebuji
> nejakym zpusobem spustit. Vezmu tedy soubor, ulozim jej na disk a nyni
> bych ho potreboval spustit v aplikaci, se kterou je asociovan. Nechci
> pouzit ShellExecute, protoze potrebuju vedet, ze uzivatel ukoncil
> aplikaci, ve ktere se soubor spustil. Chtel jsem pouzit nasledujici
fci,
> ale ta funguje pouze na spustitelne soubory coz je logicke:





----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Ondrej Kelle

6. 11. 2003 14:56

> V databazi mam ulozene soubory, ktere potrebuji
> nejakym zpusobem spustit. Vezmu tedy soubor, ulozim
> jej na disk a nyni bych ho potreboval spustit v
> aplikaci, se kterou je asociovan.

Pozri si FindExecutable v ShellAPI, alebo ShellFindExecutable v JclShell.

HTH
TOndrej




----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: kexo

6. 11. 2003 15:30

----- Original Message -----
From: "Ales Vasicek" <vasicek@ecommerce.cz>
> soubor, ulozim jej na disk a nyni bych ho potreboval spustit v aplikaci,
se kterou je asociovan. Nechci pouzit ShellExecute,

skusal si FindExecutable ?
kexo





----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)